ในภาษา C++ การจัดการการเติบโตของคอนเทนเนอร์เป็นเหมือนการเต้นรำทางสถาปัตยกรรมระหว่าง ขนาด (องค์ประกอบปัจจุบัน) กับ ความจุ (หน่วยความจำที่สำรองไว้) สำหรับคอนเทนเนอร์แบบต่อเนื่อง เช่น vector และ stringเมื่อถึงขีดจำกัดความจุจะเรียกใช้การ การจัดสรรใหม่: ระบบจะหาบล็อกหน่วยความจำที่ใหญ่ขึ้น ย้ายองค์ประกอบทั้งหมด และทำลายบล็อกเดิม ซึ่งเป็นกระบวนการที่มีต้นทุนสูง $O(n)$ ทำให้เกิดการไม่ถูกต้องของตัวชี้ (iterator invalidation) การไม่ถูกต้องของตัวชี้— ตัวชี้ของคุณไปยังองค์ประกอบเดิมจะกลายเป็นตัวชี้ที่ลอย (dangling) และอันตราย
1. กลยุทธ์การขยายตัว
เพื่อหลีกเลี่ยงการจัดสรรใหม่บ่อยครั้ง vector การประยุกต์ใช้งานจะจัดสรรพื้นที่สำรอง (buffer) คำสั่ง c.reserve(n) กำหนดความจุขั้นต่ำโดยไม่เพิ่มองค์ประกอบ ขณะที่ c.shrink_to_fit() เป็นคำขอที่ไม่บังคับให้คืนหน่วยความจำที่เหลือให้กับระบบปฏิบัติการ
2. ความแตกต่างระหว่างการเปลี่ยนขนาดกับการจอง
แม้ว่า reserve จะส่งผลเฉพาะต่อพื้นที่สำรอง resize(n) จะเปลี่ยนแปลงตรรกะของคอนเทนเนอร์อย่างกระตือรือร้น การลดขนาดผ่าน resize จะทำลายองค์ประกอบ ในขณะที่การขยายจะเพิ่มค่าเริ่มต้นตามค่าเริ่มต้น
resize ลดขนาดคอนเทนเนอร์ ตัวชี้ที่ชี้ไปยังองค์ประกอบที่ถูกลบจะไม่ถูกต้อง หากการขยายทำให้เกิดการจัดสรรใหม่ ทุกตัว ตัวชี้ทั้งหมดจะไม่ถูกต้อง